import { get, post, put, patch } from '~/utils/request';
import type {
  ILoginRequest,
  ILoginResponse,
  IChangePassword,
  IUpdateProfile,
  IMenuTree,
} from '@nbase/shared';

// 导出共享类型供组件使用
export type {
  ILoginRequest as LoginDto,
  ILoginResponse,
  IChangePassword as ChangePasswordDto,
  IUpdateProfile as UpdateProfileDto,
  IMenuTree,
} from '@nbase/shared';

// 用户信息类型（从登录响应中提取）
export type UserInfo = ILoginResponse['user'];

/**
 * 认证服务
 */
export const authService = {
  /**
   * 登录
   */
  login(data: ILoginRequest): Promise<ILoginResponse> {
    return post('/auth/login', data);
  },

  /**
   * 登出
   */
  logout(): Promise<void> {
    return post('/auth/logout');
  },

  /**
   * 获取个人信息
   */
  getProfile(): Promise<UserInfo> {
    return get('/auth/profile');
  },

  /**
   * 修改密码
   */
  changePassword(data: IChangePassword): Promise<{ message: string }> {
    return put('/auth/password', data);
  },

  /**
   * 更新个人信息
   */
  updateProfile(data: IUpdateProfile): Promise<UserInfo> {
    return patch('/auth/profile', data);
  },

  /**
   * 获取当前用户的菜单树（用于动态路由）
   */
  getMenus(): Promise<IMenuTree[]> {
    return get('/auth/menus');
  },
};

